package com.agua.enturno.servicios.impl;

import com.agua.enturno.excepciones.ExcepcionDeReglaDelNegocio;
import com.agua.enturno.modelo.turno.EstadoDeTurno;
import com.agua.enturno.modelo.turno.Turno;
import com.agua.enturno.persistencia.dao.ClienteDAO;
import com.agua.enturno.persistencia.dao.TurnoDAO;
import com.agua.enturno.servicios.TurnoService;
import com.agua.enturno.vista.dto.TurnoDTO;
import com.agua.enturno.vista.dto.assemblers.TurnoAssembler;
import org.springframework.transaction.annotation.Transactional;

public class TurnoServiceImpl implements TurnoService {

	private TurnoDAO turnoDAO;
	private ClienteDAO clienteDAO;
	private TurnoAssembler turnoAssembler;
	
	
	/*------------------------------------ Public methods ----------------------------------*/

	@Override
	@Transactional
	public TurnoDTO findById(Long id) {
		return turnoAssembler.assemble(turnoDAO.findById(id));
	}
	
	@Override
	@Transactional
	public void cancelarTurno(Long turnoId, Long clienteId) throws ExcepcionDeReglaDelNegocio {
		Turno turno = turnoDAO.findById(turnoId);
		turno.cancelar(clienteDAO.findById(clienteId));
	}
	
	@Override
	@Transactional
	public void deshabilitarTurno(Long turnoId, String motivo) {
		Turno turno = turnoDAO.findById(turnoId);
		turno.deshabilitar(motivo);
	}

	@Override
	@Transactional
	public EstadoDeTurno habilitarTurno(Long turnoId) {
		Turno turno = turnoDAO.findById(turnoId);
		turno.habilitar();
		
		return turno.getEstado();
	}

	/*--------------------------------------------------------------------------------------*/
	/*---------------------------------- Geters and seters ---------------------------------*/

	public void setTurnoDAO(TurnoDAO turnoDAO) {
		this.turnoDAO = turnoDAO;
	}
	
	public void setClienteDAO(ClienteDAO clienteDAO) {
		this.clienteDAO = clienteDAO;
	}
	
	public void setTurnoAssembler(TurnoAssembler turnoAssembler) {
		this.turnoAssembler = turnoAssembler;
	}

	/*--------------------------------------------------------------------------------------*/

}
